/*
 * ArchivoTexto.h
 *
 *  Created on: 01/04/2011
 *      Author: leonel
 */

#ifndef ARCHIVOTEXTO_H_
#define ARCHIVOTEXTO_H_

#ifndef MAX_LENGTH
#define MAX_LENGTH 256
#endif

//Inclusiones necesarias
#include <fstream>
#include <string>
#include <list>
#include <cstring>
#include <iostream>


//#include "Lista.h"

using namespace std;

class ArchivoTexto {

private:
  fstream  archivo;  // referencia al archivo de entrada y salida
  string nombre;
public:
  /**
   * Abre el archivo ubicado en el path pasado (debe incluir nombre completo) en modo lectura/escritura.
   * Deja el cursor al comienzo del mismo.
   * En caso de no existir el archivo, lo crea.
   * Si no puede realizar la operación, arroja una excepción
   */
  ArchivoTexto(const string& path);

  ArchivoTexto();
  void Open(const string& path);
  /**
   * Cierra el archivo (no lo destruye físicamente
   */
  ~ArchivoTexto();

  /**
   * Escribe un caracter al archivo en la posición del cursor.
   * Luego de escribirlo, el cursor queda en la posición siguiente
   * Si no puede escribir, arroja una excepción
   */
  void escribir(char c);

  /**
   * Escribe una cadena de caracteres al archivo en la posición del cursor.
   * Luego de escribirlo, el cursor queda en la posición siguiente al último caracter de la cadena
   *  Si no puede escribir, arroja una excepción
   */
  void escribir(const string& cadena);

  /**
   * Posiciona el cursor en una nueva linea debajo de la actual
   * Si no puede hacerlo, arroja una excepción
   */
  void terminarLinea();

  /**
   * Escribe una tabulación horizontal en el archivo, quedando el cursor en la posición siguiente
   * Si no puede hacerlo, arroja una excepción
   */
  void tabular();

  /**
   * Lee del archivo una cadena de caracteres a partir de la posición actual del cursor y hasta:
   *  - Que se encuentre un fin de linea
   *  - Se lean MAX_LENGTH caracteres
   * El contenido leido se almacena en el parámetro "cadena"
   * Retorna true si pudo leer una linea, o false en caso contrario
   */
  bool leerLinea(string &cadena );

  /**
   * Posiciona el cursor al comienzo del archivo
   */
  void irAlPrincipio();

  /**
   * Posiciona el cursor al final del archivo
   */
  void irAlFinal();

  /* indica si es fin de archivo */
//  bool EsFinArchivo();

  void MeterTextoEnString(std::string &Cadena);

  string obtenerTextoEnString();

  string obtener_words();

  //int contar_palabras();

  //list<string> obtener_palabras();

  string getNombre();

  int get_long_nombre();

  void abrirParaLeer();

  void abrirParaEscribir();

  int obtener_tamanio();

};

#endif /* ARCHIVOTEXTO_H_ */
